import QtQuick 1.0
import "Dialogs"
import "ListViews"
import "Models"
import "WebAccess/TwitterAPI.js" as TwitterAPI
import "Util/Util.js" as Util


Item {
    id: _root
    anchors.fill: parent

    // メニューを開く
    function open(name){
        _root.state = name;

    }

    function close(change_focus){
        _root.state = "";
        if(change_focus){
            _rootContainer.setFocusTextEdit(false);
        }
    }

    // サーチ中か調べる
    function isIncSearch(){
        if(_root.state === "MenuContextIncSearch"){
            return true;
        }else{
            return false;
        }
    }
    // サーチのリストを更新する
    function updateIncSearchList(values){
        _menuContextIncSearch.update(values);
    }
    // サーチ結果を取得する
    function getIncSearchResultIndex(){
        return _menuContextIncSearch.getCurrentIndex();
    }
    // サーチリストのカーソル移動
    function moveIncSearchIndex(up){
        var offset = 1;
        if(up){
            offset = -1;
        }
        _menuContextIncSearch.setCurrentIndex(_menuContextIncSearch.getCurrentIndex() + offset);
    }

    /////////////////////////////////////////////
    // 現在表示されてるリストビューのオブジェクトを取得する
    function getActiveListViewObject(){
        var list = null;

        switch(state){
        case "Menu":
            list = _menuContextMenu;
            break;
        case "MenuContextTimeline":
            list = _menuContextTimeline;
            break;
        case "MenuContextUsers":
            list = _menuContextUsers;
            break;
        case "MenuContextIncSearch":
//            list = _menuContextIncSearch;
            break;
        default:
            break;
        }
        return list;
    }

    MouseArea {
        id: _blankArea
        x: 0
        y: 0
        width: 0
        height: 0
        onClicked: {
            close(true);
        }
    }

    // キーイベント
    function onKeyPressed(event){
        switch(event.key){
        case Qt.Key_Escape:
            close(true);
            event.accepted = true;
            break;
        default:
            break;
        }
    }

    //状態が変わった時の処理
    onStateChanged: {
        var list = getActiveListViewObject();
        if(list === null){
            // 消えた
        }else{
            list.setForceActiveFocus();
        }
    }

    ///////////////////////////////
    //メインメニュー
    ListViewContext {
        id: _menuContextMenu
        x: _root.width - width - 5
        y: _actionBar.height - 5
        opacity: 0

        model: ModelContextMenu{
        }

        onClicked: {
            changeState(index);
        }
        onPressed: {
            onKeyPressed(event);
            if(event.accepted){
                // event stop
            }else{
                if((event.key === Qt.Key_Enter) || (event.key === Qt.Key_Return)){
                    changeState(index);
                }
            }
        }

        function changeState(index){
            switch(index){
            case 0:
                //Auth
                _dialogContainer.open("Auth");
                break;
            case 1:
                //Exit
                _dialogContainer.open("ExitCaution");
                break;
            case 2:
                //About
                _dialogContainer.open("AboutCaution");
                break;
            case 3:
                //Setting
                _dialogContainer.open("Setting");
                break;
            case 4:
                //help
                _dialogContainer.open("Help");
                break;
            default:
                break;
            }

            // 閉じる
            close(false);
        }
    }


    ////////////////////
    //Timeline系のコンテキストメニュー
    ListViewContext {
        id: _menuContextTimeline
        x: adjustX(_selectItemInfo.mouse_x)
        y: adjustY(_selectItemInfo.mouse_y)
        opacity: 0

        model: ModelContextTimeline{
        }

        //クリックイベント
        onClicked: {
            //Mention
            //Retweet
            //QT
            //DM

            exec(index);
        }
        onPressed: {
            onKeyPressed(event);
            if(event.accepted){
                // event stop
            }else{
                if((event.key === Qt.Key_Enter) || (event.key === Qt.Key_Return)){
                    exec(index);
                }
            }
        }

        function exec(index){
            //次
            _dialogContainer.open(_contentContainer.onClickContextItem(index));
            //メニューを消す
            close(false);
        }
    }

    //////////////////////////////////
    //User系のコンテキストメニュー
    ListViewContext {
        id: _menuContextUsers
        x: adjustX(_selectItemInfo.mouse_x)
        y: adjustY(_selectItemInfo.mouse_y)
        opacity: 0

        model: ModelContextUsers{
        }

        //クリックイベント
        onClicked: {
            //Mention
            //Retweet
            //QT
            //DM

            exec(index);
        }
        onPressed: {
            onKeyPressed(event);
            if(event.accepted){
                // event stop
            }else{
                if((event.key === Qt.Key_Enter) || (event.key === Qt.Key_Return)){
                    exec(index);
                }
            }
        }

        function exec(index){
            //次
            _dialogContainer.open( _contentContainer.onClickContextItem(index));
            //メニューを消す
            close(false);
        }
    }


    /////////////////////////////////////
    // インクリメンタルサーチのリスト
    ListViewContext {
        id: _menuContextIncSearch
        x: 10
        y: _actionBar.height + _tweetContainer.height
        opacity: 0.0

        model: ModelIncrementSearch{
            id: _modelIncSearch
        }

        Component.onCompleted: {
            _menuContextIncSearch.clear();
            _modelIncSearch.clear();

            _modelIncSearch.append({"_index":0, "_title":"test0"});
            _modelIncSearch.append({"_index":1, "_title":"test1"});
        }

        function update(values){
            // まずクリア
            _menuContextIncSearch.clear();
            _modelIncSearch.clear();

            if(values === null){
            }else{
                for(var i=0; i<values.length; i++){
                    _modelIncSearch.append({"_index":i, "_title":values[i]});
                }
            }
        }


//        //クリックイベント
//        onClicked: {
//            exec(index);
//        }
//        onPressed: {
//            onKeyPressed(event);
//            if(event.accepted){
//                // event stop
//            }else{
//                if((event.key === Qt.Key_Enter) || (event.key === Qt.Key_Return)){
//                    exec(index);
//                }
//            }
//        }
//        function exec(index){
//            // 処理

//            //メニューを消す
//            close(false);
//        }
    }

    states: [
        State {
            name: "Menu"
            PropertyChanges{
                target: _menuContextMenu
                opacity: 1.0
//                y: _root.height * 0.2
            }
            PropertyChanges {
                target: _blankArea
                width: _root.width
                height: _root.height
            }
        },
        State {
            name: "MenuContextTimeline"
            PropertyChanges {
                target: _menuContextTimeline
                opacity: 1.0
            }
            PropertyChanges {
                target: _blankArea
                width: _root.width
                height: _root.height
            }
        },
        State {
            name: "MenuContextUsers"
            PropertyChanges {
                target: _menuContextUsers
                opacity: 1.0
            }
            PropertyChanges {
                target: _blankArea
                width: _root.width
                height: _root.height
            }
        },
        State {
            name: "MenuContextIncSearch"
            PropertyChanges {
                target: _menuContextIncSearch
                opacity: 1.0
            }
            PropertyChanges {
                target: _blankArea
                width: _root.width
                height: _root.height
            }
        }
    ]
    transitions: Transition {
        NumberAnimation {
            easing.type: Easing.OutCubic
            targets: [_menuContextMenu
                    , _menuContextTimeline, _menuContextUsers
                    , _menuContextIncSearch
                    ]
            properties: "opacity"
            duration: 500
        }
    }

}
